<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  
  <!-- 数组去重 -->
  <script>
    
    // let arr = [1,1,3,3,2,4,3,1]
    var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
    // 1、使用Set (先转换为set，再转换回数组)
     let arr1 = [...new Set(arr)]
     console.log(arr1)

    // 2、使用Map (数组筛选，已经存在map中的不要，未存在map中的存进map)
    let map = new Map()
    let arr2 = arr.filter((val)=>{
      return !map.has(val) && map.set(val,1)
    })
    console.log(arr2)

    // 3、用includes()方法
    let arr3 = []
    arr.forEach(val => {
      if(!arr3.includes(val)){
        arr3.push(val)
      }
    });
    console.log(arr3)

    // 4、双层for循环，再用splice删除重复的数据
    for (let x = 0; x < arr.length; x++) {
      for (let j = x+1; j < arr.length; j++) {
        if(arr[x] === arr[j]){
          arr.splice(j,1)
          j--  // 数组减少，回退一位，还是检查当前位置，
        }
      } 
    }
    console.log(arr)

    // 5、filter
    var arr5 = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
    function unique(arr){
      return arr.filter((item,index,arr)=>{
        return arr.indexOf(item) === index
      })
    }
    console.log(unique(arr5))

    // 6、sort()去重 (相邻元素对比)
    console.log("reaArr6")
    var arr6 = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
    arr6 = arr6.sort()
    let resArr6 = [arr6[0]]
    for(let i=1; i<arr6.length; i++){
      if(arr6[i]!==arr6[i-1]){
        resArr6.push(arr6[i])
      }
    }
    console.log(resArr6)
  </script>

  <!-- 对象数组去重 -->
  <!-- <script>
    const arr = [
      {
        name:'张三',
        des:"11"
      },
      {
        name:'李四',
        des:"22"
      },
      {
        name:'张三',
        des:"22"
      },
    ]
    // 去除数组中name重复的对象 
    let res = objArrUnique(arr, "name")
    console.log(res)
    /**
     * arr：数组
     * key：对象要去重的key
     */
    function objArrUnique(arr, key){
      let map = new Map()
      return arr.filter(obj=>{
        return !map.has(obj[key]) && map.set(obj[key],1)
      })
    }
    </script> -->
</body>
</html>